﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocios;
using objetos;
using publico;
using System.Data;
using System.Text;
using System.Xml;

namespace softsales.pagina.nf
{
    public partial class nf_listar : System.Web.UI.Page
    {
        OBJ_TB_NF o_tb_nf = new OBJ_TB_NF();
        BLL_TB_NF b_tb_nf = new BLL_TB_NF();

        DataSet ds = new DataSet();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (PUB_SESSAO.Logado())
            {
                if (!IsPostBack)
                {



                    PUB_PAGINACAO.Inicializa();

                    BTN_INCLUIR.PostBackUrl = "nf_incluir.aspx";
                    //// CAMPOS PARA FILTRO
                    DDL_FILTRO.Items.Add(new ListItem("FILTRO", "FILTRO"));
                    DDL_FILTRO.Items.Add(new ListItem("ID", "ID"));
                    DDL_FILTRO.Items.Add(new ListItem("NUM_NOTA", "NUM_NOTA"));
                    LBL_TITULO_PAGINA.Text = "Lista de Notas Fiscais";
                    CarregaGrid();

                }

            }
        }

        public void CarregaGrid()
        {

            try
            {
                StringBuilder sb = new StringBuilder();


                List<string> lista = new List<string>();

                if (DDL_FILTRO.SelectedValue != string.Empty && TXT_PESQUISAR.Text != string.Empty)
                {
                    switch (DDL_FILTRO.SelectedValue)
                    {
                        case "ID":
                            lista.Add(string.Format("id = '{0}'", TXT_PESQUISAR.Text));

                            break;

                        case "NUM_NOTA":
                            lista.Add(string.Format("desc_imposto_crt LIKE '%{0}%'", TXT_PESQUISAR.Text));

                            break;

                    }


                }
                sb.Append(string.Join(" and ", lista.ToArray()));


                ds = b_tb_nf.Selecionar(sb.ToString(), PUB_PAGINACAO.Sort, PUB_PAGINACAO.PageIndex, PUB_PAGINACAO.PageSize);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    GRV_TB_NF.DataSource = ds;
                    GRV_TB_NF.DataBind();
                    PUB_PAGINACAO.Paginacao(true);
                }
                else
                {
                    GRV_TB_NF.EmptyDataText = "Nenhum registro foi encontrado";
                    GRV_TB_NF.DataBind();
                }
            }
            catch (Exception)
            {

                Master.MSG_ALERTA("Erro ao tentar listar a tabela.");
            }


        }

        protected void GRV_TB_NF_Sorting(object sender, GridViewSortEventArgs e)
        {

            PUB_PAGINACAO.Sort = e.SortExpression;
            if (PUB_PAGINACAO.SortDirection == SortDirection.Ascending)
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Descending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + " " + PUB_PAGINACAO.DESCENDENTE;
            }
            else
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Ascending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + "  " + PUB_PAGINACAO.ASCENDENTE;
            }

            CarregaGrid();


        }

        protected void BTN_INCLUIR_Click(object sender, EventArgs e)
        {
            Response.Redirect("nf_incluir.aspx", false);
        }

        protected void IMG_BTN_EDITAR_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton btn = (ImageButton)sender;
            String id = btn.CommandArgument;        
            Response.Redirect(string.Format("nf_editar.aspx?id={0}", id));
        }

    

        protected void GRV_TB_NF_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GRV_TB_NF.PageIndex = e.NewPageIndex;
            PUB_PAGINACAO.PageIndex = e.NewPageIndex;
            CarregaGrid();
        }

        protected void IMG_BTN_PESQUISAR_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = 0;
            CarregaGrid();
        }

        protected void IMG_BTN_PRIMEIRO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = 0;
            CarregaGrid();
        }

        protected void IMG_BTN_ANTERIOR_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex - 1;
            CarregaGrid();
        }

        protected void IMG_BTN_PROXIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex + 1;
            CarregaGrid();
        }

        protected void IMG_BTN_ULTIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.TotalDePaginas - 1;
            CarregaGrid();
        }

        protected void IMG_BTN_EXCLUIR_Click(object sender, ImageClickEventArgs e)
        {

        }

        protected void IMG_BTN_XML_VALIDAR_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                BLL_TB_NF_XML_VENDA b_tb_nf_xml_venda = new BLL_TB_NF_XML_VENDA();
                OBJ_TB_NF_XML_VENDA o_tb_nf_xml_venda = new OBJ_TB_NF_XML_VENDA();
                

                BLL_TB_NF_HISTORICO b_tb_nf_historico = new BLL_TB_NF_HISTORICO();
                OBJ_TB_NF_HISTORICO o_tb_nf_historico = new OBJ_TB_NF_HISTORICO();

                ImageButton btn = (ImageButton)sender;
                if(btn != null)
                {
                     int id = Convert.ToInt32(btn.CommandArgument);

                     o_tb_nf = b_tb_nf.SelecionarObjetoPorId(id);

                    nfe.NFE nf = new nfe.NFE();                                        
                    string nfe_XML = string.Empty;
                    string nfe_XML_Assinada = string.Empty;
                    string nfe_XML_Autorizada = string.Empty;
                    string nfe_chave = string.Empty;
                    string msgDados = string.Empty;
                    string msgRetWS = string.Empty;
                    string msgResultado = string.Empty;
                    string nroRecibo = string.Empty;
                    string nroProtocolo = string.Empty;
                    string dhProtocolo = string.Empty;
                    string cMsg = string.Empty;
                    string xMsg = string.Empty;
                    string dhRecbto = string.Empty;
                    string tMed = string.Empty;
                    string arquivo = string.Empty;
                    string path_relativo = string.Empty;
                    string path_absoluto = string.Empty;
                    int cStat;
                    //nfe_XML = nf.GerarXML(o_tb_nf);                    
 
                    nfe_XML_Assinada = nf.EnviaNFe2G(o_tb_nf, nfe_XML, out msgDados, out msgRetWS,out cStat, out msgResultado, out nroRecibo, out dhRecbto,out tMed);
                    
                    

                    if (cStat == 103)
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.Append("NFe enviada com sucesso, buscar lote nº");
                        sb.Append(nroRecibo);
                        b_tb_nf.AlterarStatus(id, (int)PUB_ENUM.NF_STATUS.ASSINADA);

                        b_tb_nf_historico.Incluir(o_tb_nf.id, o_tb_nf.id_empresa, cStat, msgResultado, DateTime.Now);

                        nfe_XML_Autorizada = nf.BuscaNFe2G(o_tb_nf, ref nfe_XML_Assinada, nroRecibo, out msgDados, out msgRetWS, out cStat, out msgResultado, out nroProtocolo, out dhProtocolo, out  cMsg, out xMsg);

                        if (cStat == 100)
                        {
                            b_tb_nf.AlterarStatus(id, (int)PUB_ENUM.NF_STATUS.AUTORIZADA);
                            b_tb_nf_historico.Incluir(o_tb_nf.id, o_tb_nf.id_empresa, cStat, msgResultado, DateTime.Now);

                            path_absoluto = nf.PathAbsoluto(o_tb_nf, PUB_ENUM.NF_STATUS.AUTORIZADA);
                            path_relativo = nf.PathRelativo(o_tb_nf, PUB_ENUM.NF_STATUS.AUTORIZADA);

                            arquivo = string.Format("{1}-{2}.xml", nf.nfe_chave,"nfe");
                            PUB_FUNCOES.SalvarXml(path_absoluto + "\\" + arquivo, nfe_XML_Autorizada);

                            
                            o_tb_nf_xml_venda.arquivo = arquivo;
                            o_tb_nf_xml_venda.path_absoluto = path_absoluto;
                            o_tb_nf_xml_venda.path_relativo = path_relativo;
                            o_tb_nf_xml_venda.tamanho = string.Empty;
                            o_tb_nf_xml_venda.tipo = "xml";
                            o_tb_nf_xml_venda.id_usuario = PUB_SESSAO.Id;
                            o_tb_nf_xml_venda.id_empresa = o_tb_nf.id_empresa;
                            b_tb_nf_xml_venda.Incluir(o_tb_nf_xml_venda);
                            

                        }
                        if (cStat == 105)
                        {
                            b_tb_nf.AlterarStatus(id, (int)PUB_ENUM.NF_STATUS.PROCESSAMENTO_NA_SEFAZ);

                            b_tb_nf_historico.Incluir(o_tb_nf.id, o_tb_nf.id_empresa, cStat, msgResultado, DateTime.Now);
                        }

                    }
                    else
                    {
                        b_tb_nf_historico.Incluir(o_tb_nf.id, o_tb_nf.id_empresa, cStat, msgResultado, DateTime.Now);
                    }
                    
                    ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "mensagem", string.Format("<script type=\"text/javascript\"> window.open('../nf_historico/nf_historico_modal.aspx?id={0}'); </script>",o_tb_nf.id ), false);
                }
               
                
            }
            catch (Exception)
            {
                
                throw;
            }
        }


      

    }
}